home *** CD-ROM | disk | FTP | other *** search
Text File | 1986-11-10 | 7.3 KB | 317 lines | [TEXT/PJMM] |
- { Printdemo program by Dave Kelly }
- { for MacTutor Dec 1986}
- { Lightspeed Pascal 1.0}
-
- PROGRAM Printdemo;
- USES
- MacPrint;
-
- CONST
- appleID = 1;
- fileID = 2;
- appleMenu = 1;
- fileMenu = 2;
- menuCount = 2;
- printscr = 1;
- printptr = 2;
- pagesetup = 3;
- Jobsetup = 4;
- clrscr = 6;
- quit = 7;
- plainDBox = 2;
-
- VAR
- myMenus : ARRAY[1..menuCount] OF MenuHandle;
- theChar : CHAR;
- extended : BOOLEAN;
- doneFlag : BOOLEAN;
- myEvent : EventRecord;
- wRecord : WindowRecord;
- Windowport : Windowptr;
- whichWindow : Windowptr;
- UpdateWindow : Windowptr;
- windowsize : longint;
- height, width : integer;
- sizeRect, size, dragRect : Rect;
- valid, screenprinted : boolean;
- prRecHdl : THPrint;
- printmgr : boolean;
- myPrPort : TPPrPort;
- myStRec : TPrStatus;
- P : ARRAY[1..15] OF longint;
- pheight : longint;
- pwidth : longint;
- Ptype : integer;
-
- PROCEDURE SetUpMenus;
- VAR
- i : INTEGER;
- BEGIN
- myMenus[appleMenu] := NewMenu(AppleID, chr(appleMark));
- AddResMenu(myMenus[appleMenu], 'DRVR');
- myMenus[fileMenu] := NewMenu(fileID, 'File ');
- appendmenu(myMenus[fileMenu], '(Print to screen;Print to printer;Page Setup;Job Setup;(-;Clear Screen;Quit/Q');
- FOR i := 1 TO menuCount DO
- InsertMenu(myMenus[i], 0);
- DrawMenuBar;
- END;
-
- PROCEDURE openprintmgr;
- BEGIN
- PrOpen;
- prRecHdl := THPrint(NewHandle(SIZEOF(TPrint)));
- printmgr := true;
- EnableItem(myMenus[fileMenu], printscr);
- END;
-
- PROCEDURE getprintinfo;
- BEGIN
- P[1] := prRecHdl^^.iPrVersion; { Print Manager version}
- P[2] := prRecHdl^^.prInfo.iVRes; { Vertical resolution}
- P[3] := prRecHdl^^.prInfo.iHRes; { Horizontal resolution}
- P[4] := prRecHdl^^.prInfo.rPage.top; { Page Rectangle}
- P[5] := prRecHdl^^.prInfo.rPage.left;
- P[6] := prRecHdl^^.prInfo.rPage.bottom;
- P[7] := prRecHdl^^.prInfo.rPage.right;
- P[8] := prRecHdl^^.rPaper.top; { Paper Rectangle}
- P[9] := prRecHdl^^.rPaper.left;
- P[10] := prRecHdl^^.rPaper.bottom;
- P[11] := prRecHdl^^.rPaper.right;
- pheight := ((P[10] - P[8]) * 120 DIV P[2]); { Paper height}
- pwidth := ((P[11] - P[9]) * 120 DIV P[3]);{ Paper width}
- Ptype := (prRecHdl^^.prStl.wDev); {printer type}
- Ptype := (BitAnd(Ptype, 65280) DIV 256);
- P[12] := prRecHdl^^.prJob.iFstPage; { First page}
- P[13] := prRecHdl^^.prJob.iLstPage; { Last page}
- P[14] := prRecHdl^^.prJob.iCopies; { # of copies}
- END;
-
- PROCEDURE printinfo;
- BEGIN
- Getprintinfo;
- textfont(monaco);
- textsize(9);
- moveto(20, 20);
- WriteDraw('Print Manager Version');
- moveto(150, 20);
- WriteDraw(P[1]);
- moveto(20, 30);
- WriteDraw('Vertical resolution');
- moveto(150, 30);
- WriteDraw(P[2]);
- moveto(20, 40);
- WriteDraw('Horizontal resolution');
- moveto(150, 40);
- WriteDraw(P[3]);
- moveto(20, 50);
- WriteDraw('Page Rectangle');
- moveto(150, 50);
- WriteDraw(P[4], P[5], P[6], P[7]);
- moveto(20, 60);
- WriteDraw('Papar Rectangle');
- moveto(150, 60);
- WriteDraw(P[8], P[9], P[10], P[11]);
- moveto(20, 70);
- WriteDraw('Paper height');
- moveto(150, 70);
- WriteDraw(pheight);
- moveto(20, 80);
- WriteDraw('Paper width');
- moveto(150, 80);
- WriteDraw(pwidth);
- moveto(20, 90);
- WriteDraw('Printer type');
- moveto(150, 90);
- WriteDraw(Ptype);
- moveto(20, 100);
- WriteDraw('First Page');
- moveto(150, 100);
- WriteDraw(P[12]);
- moveto(20, 110);
- WriteDraw('Last Page');
- moveto(150, 110);
- WriteDraw(P[13]);
- moveto(20, 120);
- WriteDraw('# of copies');
- moveto(150, 120);
- WriteDraw(P[14]);
- END;
-
- PROCEDURE DrawingProc;
- BEGIN
- framerect(myPrPort^.gPort.portRect);
- printinfo;
- END;
-
- PROCEDURE DoCommand (mResult : LONGINT);
- VAR
- theItem : INTEGER;
- theMenu : INTEGER;
- name : Str255;
- temp, i : INTEGER;
- BEGIN
- theItem := LoWord(mResult);
- theMenu := HiWord(mResult);
- CASE theMenu OF
- appleID :
- BEGIN
- GetItem(myMenus[appleMenu], theItem, name);
- temp := OpenDeskAcc(name);
- SetPort(Windowport);
- END;
- fileID :
- CASE theItem OF
- printscr :
- BEGIN
- IF printmgr THEN
- BEGIN
- SetPort(Windowport);
- eraserect(Windowport^.portrect);
- FrameRect(Windowport^.portrect);
- printinfo;
- validRect(Windowport^.PortRect);
- screenprinted := true;
- END;
- END; { printscr}
-
- printptr :
- BEGIN
- IF NOT printmgr THEN
- openprintmgr;
- valid := PrJobDialog(prRecHdl);
- IF valid THEN
- BEGIN
- myPrPort := PrOpenDoc(prRecHdl, NIL, NIL);
- IF PrError = noErr THEN
- BEGIN
- PrOpenPage(myPrPort, NIL);
- IF PrError = noErr THEN
- DrawingProc;
- PrClosePage(myPrPort);
- END;
- PrCloseDoc(myPrPort);
- IF (prRecHdl^^.prJob.bjDocLoop = bSpoolLoop) AND (PrError = noErr) THEN
- PrPicFile(prRecHdl, NIL, NIL, NIL, myStRec);
- END;
- END;
- Jobsetup :
- BEGIN
- IF NOT printmgr THEN
- openprintmgr;
- valid := PrJobDialog(prRecHdl);
- END;
- pagesetup :
- BEGIN
- IF NOT printmgr THEN
- openprintmgr;
- valid := PrStlDialog(prRecHdl);
- END;
- clrscr :
- BEGIN
- eraserect(Windowport^.portrect);
- screenprinted := false;
- END;
- quit :
- BEGIN
- IF printmgr THEN
- BEGIN
- PrClose;
- printmgr := false;
- END;
- doneFlag := TRUE;
- END;
- OTHERWISE
- ;
- END; {itemCase}
- OTHERWISE
- ;
- END; { menuCase }
- SetPort(Windowport);
- HiliteMenu(0);
- END;
-
- BEGIN
- InitGraf(@thePort);
- InitFonts;
- FlushEvents(everyEvent, 0);
- InitWindows;
- InitMenus;
- InitDialogs(NIL);
- InitCursor;
- SetRect(sizeRect, 50, 50, 450, 300);
- dragRect := sizeRect;
- doneFlag := FALSE;
- printmgr := false;
- screenprinted := false;
- Windowport := Newwindow(@wRecord, sizeRect, '', true, plainDBox, POINTER(-1), false, 0);
- SetPort(Windowport);
- SetUpMenus;
- REPEAT
- SystemTask;
- IF GetNextEvent(everyEvent, myEvent) THEN
- CASE myEvent.what OF
- mouseDown :
- CASE FindWindow(myEvent.where, whichWindow) OF
- inDesk :
- ; {Not used}
- inMenuBar :
- DoCommand(MenuSelect(myEvent.where));
- inSysWindow :
- SystemClick(myEvent, whichWindow);
- inContent :
- BEGIN
- IF whichWindow <> FrontWindow THEN
- SelectWindow(whichWindow)
- ELSE
- BEGIN
- GlobalToLocal(myEvent.where);
- extended := BitAnd(myEvent.modifiers, shiftKey) <> 0;
- END;
- END;
- inDrag :
- ; {Not used}
- inGrow :
- ; {Not used}
- inGoAway :
- ; {Not used}
- END;
- mouseUp :
- ; {Not used}
- keydown, autokey :
- BEGIN
- theChar := CHR(BitAnd(myEvent.message, charCodeMask));
- IF BitAnd(myEvent.modifiers, cmdKey) <> 0 THEN
- DoCommand(MenuKey(theChar));
- END;
- keyUp :
- ; {Not used}
- updateEvt :
- IF screenprinted THEN
- BEGIN
- UpdateWindow := WindowPtr(myEvent.message);
- BeginUpdate(UpdateWindow);
- SetPort(UpdateWindow);
- eraserect(UpdateWindow^.portrect);
- FrameRect(UpdateWindow^.portrect);
- printinfo;
- EndUpdate(UpdateWindow);
- END;
- diskEvt :
- ; {Not used}
- activateEvt :
- ; {Not used}
- networkEvt :
- ; {Not used}
- driverEvt :
- ; {Not used}
- app1Evt :
- ; {Not used}
- app2Evt :
- ; {Not used}
- app3Evt :
- ; {Not used}
- OTHERWISE
- ;
- END;
- UNTIL doneFlag;
- END.